home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cgraphix / filblock.asm < prev    next >
Assembly Source File  |  1986-04-30  |  966b  |  53 lines

  1.     title - filblock - fills a segment/offset block of memory
  2.  
  3.     include    model.h
  4.     include    prologue.h
  5.  
  6.     public    filblock
  7.  
  8.  
  9. foff    equ    @ab[bp]
  10. fseg    equ    @ab+2[bp]
  11. fchar    equ    @ab+4[bp]
  12. flen    equ    @ab+6[bp]
  13.  
  14.  
  15. filblock    proc    near
  16.  
  17.     push    bp
  18.     mov    bp,sp
  19.  
  20.     mov    cx,word ptr flen    ;if there is not anything to
  21.     or    cx,cx            ;  fill then bypass the rest
  22.     jz    filend            ;  of the routine
  23.  
  24.     les    di,dword ptr foff    ;get starting address
  25.     mov    ax,fchar        ;get byte value into AL
  26.     mov    ah,al            ;  and AH
  27.  
  28.     mov    bx,di            ;if not on a word boundary
  29.     and    bx,1            ;  then fill a byte so that
  30.     jz    fil1            ;  we are on a full word
  31.     stosb                ;  boundary (for 16-bit buses)
  32.     dec    cx
  33. fil1:
  34.     push    cx            ;save counter
  35.     sar    cx,1            ;number of word moves
  36.     rep    stosw            ;  fill using word moves
  37.  
  38.     pop    cx            ;recover counter
  39.     and    cx,1            ;an odd byte not filled?
  40.     jz    filend            ;  if so then
  41.     stosb                ;  fill it
  42.  
  43. filend:
  44.     pop    bp
  45.     ret
  46.  
  47. filblock    endp
  48.  
  49.     include    epilogue.h
  50.  
  51.     end
  52.  
  53.